package demo5;

class OutClass{

    public int a=1;
    public int b=2;
    public static int c=3;

    //静态内部类
    static class InnerClass{
        public int d=2;
        public static int e=7;


        public void test(){
            //静态内部类当中，不能够直接访问外部类的非静态成员
//            System.out.println(a);
            OutClass outClass=new OutClass();
            System.out.println(outClass.a);
            System.out.println("test方法执行了.....");
        }
    }
}

class OutClass2{

    public int a=1;
    public int b=2;
    public static int c=3;

    class InnerClass2{
        public int a=1000;
        public int d=2;
        public static int e=7;

        public void test(){
            OutClass outClass=new OutClass();
            //对于实例内部类来说，包含2个this，一个this是实例内部类自己的，一个是外部类名.this
            System.out.println(outClass.a);
            System.out.println(a);
            System.out.println("实例test");
        }
    }
}

class Out{
    public void eat(){
        System.out.println("sdsdsds");
    }
}


interface IA{
    void test1();
}
public class Test {
    public static void main(String[] args) {

        //这个类实现了IA接口，并且同时重写了test1这个方法
        IA ia= new IA(){
            @Override
            public void test1() {
                System.out.println("llll");
            }
        };
        ia.test1();

        //匿名内部类
//        new Out(){
//
//        }.eat();
        new Out(){
            public void eat(){
                System.out.println("heheheh");
            }
        }.eat();
    }

    public static void main2(String[] args) {
        //实例化一个实力内部类对象
        OutClass2 outClass=new OutClass2();
        OutClass2.InnerClass2 innerClass=outClass.new InnerClass2();
        innerClass.test();
    }

    public static void main1(String[] args) {

        //实例化一个静态内部类的对象
        OutClass.InnerClass innerClass=new OutClass.InnerClass();//静态需要类名去访问
        innerClass.test();
    }
}
